////////////////////////////////////////////////////////////////////////////////

#ifndef _PHYSICS_H_
#define _PHYSICS_H_

////////////////////////////////////////////////////////////////////////////////

#ifndef _PHYSICALTYPES_H_
#include "physicaltypes.h"
#endif

#include <cstddef>

////////////////////////////////////////////////////////////////////////////////

class PhysicalObject;
class PhysicsEngine;

////////////////////////////////////////////////////////////////////////////////


/** Interface to physics engine.
*
*  @author   Anastasia Karpinska
*  @since    Sep 14th, 2009
*  @updated  Sep 14th, 2009
*/
class Physics
{
////////////////////////////////////////////////////////////////////////////////

public:

////////////////////////////////////////////////////////////////////////////////


    /** Destructor */
    virtual ~Physics();


    /** Adds new object */
    virtual void AddObject( PhysicalObject* _object ) = 0;

    
    /** Removes object */
    virtual void DeleteObject( PhysicalObject* _object ) = 0;


    /** Updates objects states */
    virtual void Update( size_t _dt ) = 0;


    /** Get physical engine */
    static Physics* GetPhysicalEngine();


////////////////////////////////////////////////////////////////////////////////

};


////////////////////////////////////////////////////////////////////////////////

#endif

////////////////////////////////////////////////////////////////////////////////
